from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.sms.v20190711 import sms_client, models


def send_message(phone, random_code, template_id="727017"):
    """
    发送短信验证码
        验证码发送到手机上，购买服务器进行发送短信：腾讯云
        1.注册腾讯云，开通腾讯云短信。
        2.创建应用
            SDK AppID = 1400429789
        3.申请签名（个人：公众号）
            ID     313934
            名称   上兰帝国理工BigDat
        4.申请模板
            ID     727017
            名称   普通短信
        5.申请腾讯云API https://console.cloud.tencent.com/cam/capi
            SecretId:  AKIDdEguNWHJrDRRCiSHH2YzQbXXHm2OodV7
            SecretKey: igORJODxTihP24ShgWAajeMq42nJejZY
        6.调用相关接口去发送短信 https://cloud.tencent.com/document/product/382/38778
            SDK，写好的工具。

    """
    # ############################# 腾讯云短信配置 ##########################
    TENCENT_SECRET_ID = "AKIDdEguNWHJrDRRCiSHH2YzQbXXHm2OodV7"
    TENCENT_SECRET_KEY = "igORJODxTihP24ShgWAajeMq42nJejZY"
    TENCENT_CITY = "ap-guangzhou"
    TENCENT_APP_ID = "1400429789"
    TENCENT_SIGN = "上兰帝国理工BigDat"
    try:
        phone = "{}{}".format("+86", phone)
        # 实例化一个认证对象
        cred = credential.Credential(TENCENT_SECRET_ID, TENCENT_SECRET_KEY)
        # 实例化要请求产品(以sms为例)的client对象，第二个参数是地域信息
        client = sms_client.SmsClient(cred, TENCENT_CITY)
        # 实例化一个请求对象
        req = models.SendSmsRequest()
        req.SmsSdkAppid = TENCENT_APP_ID
        # 短信签名内容: 使用 UTF-8 编码，必须填写已审核通过的签名，签名信息可登录 [短信控制台] 查看
        req.Sign = TENCENT_SIGN
        # 示例如：+8613711112222， 其中前面有一个+号 ，86为国家码，13711112222为手机号，最多不要超过200个手机号
        req.PhoneNumberSet = [phone, ]
        # 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看
        req.TemplateID = template_id
        # 模板参数: 若无模板参数，则设置为空
        req.TemplateParamSet = [str(random_code), ]

        resp = client.SendSms(req)

        # print(resp.to_json_string(indent=2))
        # 输出json格式的字符串回包
        if resp.SendStatusSet[0].Code == "Ok":
            return True

    except TencentCloudSDKException as err:
        print(err)
